package com.huike.report.mapper;

import java.util.List;
import java.util.Map;

import com.huike.clues.domain.TbAssignRecord;
import com.huike.clues.domain.TbClue;
import com.huike.contract.domain.ContractStatistics;
import com.huike.contract.domain.vo.SubjectStatisticsVo;
import com.huike.report.domain.vo.IndexTodayInfoVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import com.huike.clues.domain.vo.IndexStatisticsVo;

/**
 * 首页统计分析的Mapper
 *
 * @author Administrator
 */
public interface ReportMapper {
    /**=========================================基本数据========================================*/
    /**
     * 获取线索数量
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return
     */
    Integer getCluesNum(@Param("startTime") String beginCreateTime,
                        @Param("endTime") String endCreateTime,
                        @Param("username") String username);

    /**
     * 获取商机数量
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return
     */
    Integer getBusinessNum(@Param("startTime") String beginCreateTime,
                           @Param("endTime") String endCreateTime,
                           @Param("username") String username);

    /**
     * 获取合同数量
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return
     */
    Integer getContractNum(@Param("startTime") String beginCreateTime,
                           @Param("endTime") String endCreateTime,
                           @Param("username") String username);

    /**
     * 获取合同金额
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return
     */
    Double getSalesAmount(@Param("startTime") String beginCreateTime,
                          @Param("endTime") String endCreateTime,
                          @Param("username") String username);

    /**=========================================今日简报========================================*/
    /**
     * 获取简报线索数量
     *
     * @param username 用户名
     * @return 线索数量
     */
    Integer getBriefingClueNum(@Param("username") String username);

    /**
     * 获取简报商机数量
     *
     * @param username 用户名
     * @return 商机数量
     */
    Integer getBriefingBusinessNum(@Param("username") String username);

    /**
     * 获取简报合同数量与合同销售金额
     *
     * @param username 用户名
     * @return 合同数量与合同销售金额
     */
    IndexTodayInfoVO getBriefingContractNum(@Param("username") String username);

    /**=========================================待办========================================*/

    /**
     * 获取待跟近的线索数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return 线索数
     */
    Integer getTodoKeepClueNum(@Param("startTime") String beginCreateTime,
                               @Param("endTime") String endCreateTime,
                               @Param("username") String username);

    /**
     * 获取待跟近的商机数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @param username        用户名
     * @return 商机数
     */
    Integer getTodoKeepBusinessNum(@Param("startTime") String beginCreateTime,
                                   @Param("endTime") String endCreateTime,
                                   @Param("username") String username);

    /**
     * 获取分配记录中的线索集合
     *
     * @return 线索的分配记录集合
     */
    List<TbAssignRecord> getClueIdInAssignRecord();

    /**
     * 获取待分配的线索记录
     *
     * @param assignRecordList 线索的分配记录集合
     * @return 待分配的线索数
     */
    Integer getTodoAllocatedClueNum(@Param("assignRecordList") List<TbAssignRecord> assignRecordList);

    /**
     * 获取分配记录中的商机集合
     *
     * @return 商机的分配记录集合
     */
    List<TbAssignRecord> getBusinessIdInAssignRecord();

    /**
     * 获取待分配的商机记录
     *
     * @param assignRecordList 商机的分配记录集合
     * @return 待分配的商机数
     */
    Integer getTodoAllocatedBusinessNum(@Param("assignRecordList") List<TbAssignRecord> assignRecordList);

    /**
     * 统计学科合同数量
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 学科合同数量对象
     */
    List<SubjectStatisticsVo> getSubjectStatistics(@Param("startTime") String beginCreateTime,
                                                   @Param("endTime") String endCreateTime);

    /**
     * 获取每个时间的新增线索数
     *
     * @param time 时间
     * @return 线索数集合
     */
    Long getNewClue(@Param("time") String time);

    /**
     * 获取每个时间的总线索数
     *
     * @param time 时间
     * @return 总线索数集合
     */
    Long getTotalClue(@Param("time") String time);


    /**
     * 获取在时间内的线索总数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 线索总数
     */
    Integer getAllClue(@Param("startTime") String beginCreateTime,
                       @Param("endTime") String endCreateTime);

    /**
     * 获取在时间内的有效线索
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 有效线索数
     */
    Integer getValidClue(@Param("startTime") String beginCreateTime,
                         @Param("endTime") String endCreateTime);

    /**
     * 获取在时间内的有效商机数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 有效商机数
     */
    Integer getValidBusiness(@Param("startTime") String beginCreateTime,
                             @Param("endTime") String endCreateTime);

    /**
     * 获取在时间内的有效合同数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 有效合同数
     */
    Integer getValidContract(@Param("startTime") String beginCreateTime,
                             @Param("endTime") String endCreateTime);

    /**
     * 获取转化合同统计
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 合同统计对象
     */
    List<ContractStatistics> getContractStatistics(@Param("startTime") String beginCreateTime,
                                                   @Param("endTime") String endCreateTime);

    /**
     * 获取规定时间内商机的总数
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 商机总数
     */
    Integer getAllBusinessNum(@Param("startTime") String beginCreateTime,
                              @Param("endTime") String endCreateTime);

    /**
     * 获取转化商机统计
     *
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 合同统计对象
     */
    List<ContractStatistics> getBusinessStatistics(@Param("startTime") String beginCreateTime,
                                                   @Param("endTime") String endCreateTime);

    /**
     * 获取规定时间内线索的总数
     * @param beginCreateTime 开始时间
     * @param endCreateTime   结束时间
     * @return 线索总数
     */
    Integer getAllClueNum(@Param("startTime") String beginCreateTime,
                              @Param("endTime") String endCreateTime);

    /**
     * 获取每个用户所对应的部门
     * @return 对应部门集合
     */
    @MapKey("username")
    List<Map<String,String>> getDeptByUserName ();
}
